package com.game.Maze.Objects;

import com.game.Maze.Util.WorldSide;

/**
 * Объект, реализующий проход или стену
 *
 */
public class Passage
{
  private PassageType m_Type = PassageType.None;
  private WorldSide m_Side = WorldSide.None;
  private Room m_Parent = null;
  
  // Видит ли игрок стену
  // TODO Сделать false
  private boolean m_Visible = true;
  
  /**
   * Создает объект типа стена 
   * @param parentRoom комната к которой относится объект 
   * @param passageSide сторона света относительно комнаты
   */
  public Passage(Room parentRoom, WorldSide passageSide)
  {
    m_Parent = parentRoom;
    m_Side = passageSide;
    m_Type = PassageType.Wall;
  }

  /**
   * Задает объект как проход
   */
  public void makePassage()
  {
    m_Type = PassageType.Passage;
  }
  
  /**
   * @return истину, если объект является стеной
   */
  public boolean isWall()
  {
    return (PassageType.Wall == m_Type);
  }

  /**
   * @return истину, если объект является проходом
   */
  public boolean isPassage()
  {
    return (PassageType.Passage == m_Type);
  }
  
  /**
   * Возвращает комнату, находящуюся с другой стороны стены.
   * @return комната 
   */
  public Room oppositeRoom()
  {
    return m_Parent.roomBySide(m_Side);
  }

  /**
   * Возвращает комнату с которой связана данная стена или проход.
   * @return комната 
   */
  public Room room()
  {
    return m_Parent;
  }

  /**
   * Возвращает сторону света на которой находится проход или стена.
   * @return сторона света
   */
  public WorldSide side()
  {
    return m_Side;
  }

  public boolean isVisible()
  {
    return m_Visible;
  }

  public void makeVisible()
  {
    m_Visible = true;  
  }
}
